System.register(['./array-change-records', './map-change-records'], function (_export) {
'use strict';
var calcSplices, projectArraySplices, getChangeRecords, ModifyCollectionObserver, CollectionLengthObserver;
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
return {
setters: [function (_arrayChangeRecords) {
calcSplices = _arrayChangeRecords.calcSplices;
projectArraySplices = _arrayChangeRecords.projectArraySplices;
}, function (_mapChangeRecords) {
getChangeRecords = _mapChangeRecords.getChangeRecords;
}],
execute: function () {
ModifyCollectionObserver = (function () {
function ModifyCollectionObserver(taskQueue, collection) {
_classCallCheck(this, ModifyCollectionObserver);
this.taskQueue = taskQueue;
this.queued = false;
this.callbacks = [];
this.changeRecords = [];
this.oldCollection = null;
this.collection = collection;
this.lengthPropertyName = collection instanceof Map ? 'size' : 'length';
}
ModifyCollectionObserver.prototype.subscribe = function subscribe(callback) {
var callbacks = this.callbacks;
callbacks.push(callback);
return function () {
callbacks.splice(callbacks.indexOf(callback), 1);
};
};
ModifyCollectionObserver.prototype.addChangeRecord = function addChangeRecord(changeRecord) {
if (this.callbacks.length === 0 && !this.lengthObserver) {
return;
}
this.changeRecords.push(changeRecord);
if (!this.queued) {
this.queued = true;
this.taskQueue.queueMicroTask(this);
}
};
ModifyCollectionObserver.prototype.reset = function reset(oldCollection) {
if (!this.callbacks.length) {
return;
}
this.oldCollection = oldCollection;
if (!this.queued) {
this.queued = true;
this.taskQueue.queueMicroTask(this);
}
};
ModifyCollectionObserver.prototype.getLengthObserver = function getLengthObserver() {
return this.lengthObserver || (this.lengthObserver = new CollectionLengthObserver(this.collection));
};
ModifyCollectionObserver.prototype.call = function call() {
var callbacks = this.callbacks,
i = callbacks.length,
changeRecords = this.changeRecords,
oldCollection = this.oldCollection,
records;
this.queued = false;
this.changeRecords = [];
this.oldCollection = null;
if (i) {
if (oldCollection) {
// TODO (martingust) we might want to refactor this to a common, independent of collection type, way of getting the records
if (this.collection instanceof Map) {
records = getChangeRecords(oldCollection);
} else {
//we might need to combine this with existing change records....
records = calcSplices(this.collection, 0, this.collection.length, oldCollection, 0, oldCollection.length);
}
} else {
if (this.collection instanceof Map) {
records = changeRecords;
} else {
records = projectArraySplices(this.collection, changeRecords);
}
}
while (i--) {
callbacks[i](records);
}
}
if (this.lengthObserver) {
this.lengthObserver.call(this.collection[this.lengthPropertyName]);
}
};
return ModifyCollectionObserver;
})();
_export('ModifyCollectionObserver', ModifyCollectionObserver);
CollectionLengthObserver = (function () {
function CollectionLengthObserver(collection) {
_classCallCheck(this, CollectionLengthObserver);
this.collection = collection;
this.callbacks = [];
this.lengthPropertyName = collection instanceof Map ? 'size' : 'length';
this.currentValue = collection[this.lengthPropertyName];
}
CollectionLengthObserver.prototype.getValue = function getValue() {
return this.collection[this.lengthPropertyName];
};
CollectionLengthObserver.prototype.setValue = function setValue(newValue) {
this.collection[this.lengthPropertyName] = newValue;
};
CollectionLengthObserver.prototype.subscribe = function subscribe(callback) {
var callbacks = this.callbacks;
callbacks.push(callback);
return function () {
callbacks.splice(callbacks.indexOf(callback), 1);
};
};
CollectionLengthObserver.prototype.call = function call(newValue) {
var callbacks = this.callbacks,
i = callbacks.length,
oldValue = this.currentValue;
while (i--) {
callbacks[i](newValue, oldValue);
}
this.currentValue = newValue;
};
return CollectionLengthObserver;
})();
_export('CollectionLengthObserver', CollectionLengthObserver);
}
};
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL2JpbmRpbmcvc3JjL2NvbGxlY3Rpb24tb2JzZXJ2YXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OzBEQUdhLHdCQUF3QixFQXlGeEIsd0JBQXdCOzs7Ozs7d0NBNUY3QixXQUFXO2dEQUFFLG1CQUFtQjs7MkNBQ2hDLGdCQUFnQjs7O0FBRVgsOEJBQXdCO0FBRXhCLGlCQUZBLHdCQUF3QixDQUV2QixTQUFTLEVBQUUsVUFBVSxFQUFDO2dDQUZ2Qix3QkFBd0I7O0FBR2pDLGNBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzNCLGNBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3BCLGNBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLGNBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLGNBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzFCLGNBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQzdCLGNBQUksQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLFlBQVksR0FBRyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7U0FDekU7O0FBVlUsZ0NBQXdCLFdBWW5DLFNBQVMsR0FBQSxtQkFBQyxRQUFRLEVBQUM7QUFDakIsY0FBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUMvQixtQkFBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6QixpQkFBTyxZQUFVO0FBQ2YscUJBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztXQUNsRCxDQUFDO1NBQ0g7O0FBbEJVLGdDQUF3QixXQW9CbkMsZUFBZSxHQUFBLHlCQUFDLFlBQVksRUFBQztBQUMzQixjQUFHLElBQUksQ0FB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LCJmaWxlIjoiL1VzZXJzL0Vpc2VuYmVyZ0VmZmVjdC9Eb2N1bWVudHMvR2l0SHViL1RoZSBEdXJhbmRhbCBQcm9qZWN0L2F1cmVsaWEvYmluZGluZy9zcmMvY29sbGVjdGlvbi1vYnNlcnZhdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y2FsY1NwbGljZXMsIHByb2plY3RBcnJheVNwbGljZXN9IGZyb20gJy4vYXJyYXktY2hhbmdlLXJlY29yZHMnO1xuaW1wb3J0IHtnZXRDaGFuZ2VSZWNvcmRzfSBmcm9tICcuL21hcC1jaGFuZ2UtcmVjb3Jkcyc7XG5cbmV4cG9ydCBjbGFzcyBNb2RpZnlDb2xsZWN0aW9uT2JzZXJ2ZXIge1xuXG4gIGNvbnN0cnVjdG9yKHRhc2tRdWV1ZSwgY29sbGVjdGlvbil7XG4gICAgdGhpcy50YXNrUXVldWUgPSB0YXNrUXVldWU7XG4gICAgdGhpcy5xdWV1ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbGxiYWNrcyA9IFtdO1xuICAgIHRoaXMuY2hhbmdlUmVjb3JkcyA9IFtdO1xuICAgIHRoaXMub2xkQ29sbGVjdGlvbiA9IG51bGw7XG4gICAgdGhpcy5jb2xsZWN0aW9uID0gY29sbGVjdGlvbjtcbiAgICB0aGlzLmxlbmd0aFByb3BlcnR5TmFtZSA9IGNvbGxlY3Rpb24gaW5zdGFuY2VvZiBNYXAgPyAnc2l6ZScgOiAnbGVuZ3RoJztcbiAgfVxuXG4gIHN1YnNjcmliZShjYWxsYmFjayl7XG4gICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzO1xuICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgIGNhbGxiYWNrcy5zcGxpY2UoY2FsbGJhY2tzLmluZGV4T2YoY2FsbGJhY2spLCAxKTtcbiAgICB9O1xuICB9XG5cbiAgYWRkQ2hhbmdlUmVjb3JkKGNoYW5nZVJlY29yZCl7XG4gICAgaWYodGhpcy5jYWxsYmFja3MubGVuZ3RoID09PSAwICYmICF0aGlzLmxlbmd0aE9ic2VydmVyKXtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZVJlY29yZHMucHVzaChjaGFuZ2VSZWNvcmQpO1xuXG4gICAgaWYoIXRoaXMucXVldWVkKXtcbiAgICAgIHRoaXMucXVldWVkID0gdHJ1ZTtcbiAgICAgIHRoaXMudGFza1F1ZXVlLnF1ZXVlTWljcm9UYXNrKHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0KG9sZENvbGxlY3Rpb24pe1xuICAgIGlmKCF0aGlzLmNhbGxiYWNrcy5sZW5ndGgpe1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMub2xkQ29sbGVjdGlvbiA9IG9sZENvbGxlY3Rpb247XG5cbiAgICBpZighdGhpcy5xdWV1ZWQpe1xuICAgICAgdGhpcy5xdWV1ZWQgPSB0cnVlO1xuICAgICAgdGhpcy50YXNrUXVldWUucXVldWVNaWNyb1Rhc2sodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0TGVuZ3RoT2JzZXJ2ZXIoKXtcbiAgICByZXR1cm4gdGhpcy5sZW5ndGhPYnNlcnZlciB8fCAodGhpcy5sZW5ndGhPYnNlcnZlciA9IG5ldyBDb2xsZWN0aW9uTGVuZ3RoT2JzZXJ2ZXIodGhpcy5jb2xsZWN0aW9uKSk7XG4gIH1cblxuICBjYWxsKCl7XG4gICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzLFxuICAgICAgaSA9IGNhbGxiYWNrcy5sZW5ndGgsXG4gICAgICBjaGFuZ2VSZWNvcmRzID0gdGhpcy5jaGFuZ2VSZWNvcmRzLFxuICAgICAgb2xkQ29sbGVjdGlvbiA9IHRoaXMub2xkQ29sbGVjdGlvbixcbiAgICAgIHJlY29yZHM7XG5cbiAgICB0aGlzLnF1ZXVlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlUmVjb3JkcyA9IFtdO1xuICAgIHRoaXMub2xkQ29sbGVjdGlvbiA9IG51bGw7XG5cbiAgICBpZihpKXtcbiAgICAgIGlmKG9sZENvbGxlY3Rpb24pe1xuICAgICAgICAvLyBUT0RPIChtYXJ0aW5ndXN0KSB3ZSBtaWdodCB3YW50IHRvIHJlZmFjdG9yIHRoaXMgdG8gYSBjb21tb24sIGluZGVwZW5kZW50IG9mIGNvbGxlY3Rpb24gdHlwZSwgd2F5IG9mIGdldHRpbmcgdGhlIHJlY29yZHNcbiAgICAgICAgaWYodGhpcy5jb2xsZWN0aW9uIGluc3RhbmNlb2YgTWFwKXtcbiAgICAgICAgICByZWNvcmRzID0gZ2V0Q2hhbmdlUmVjb3JkcyhvbGRDb2xsZWN0aW9uKTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgIC8vd2UgbWlnaHQgbmVlZCB0byBjb21iaW5lIHRoaXMgd2l0aCBleGlzdGluZyBjaGFuZ2UgcmVjb3Jkcy4uLi5cbiAgICAgICAgICByZWNvcmRzID0gY2FsY1NwbGljZXModGhpcy5jb2xsZWN0aW9uLCAwLCB0aGlzLmNvbGxlY3Rpb24ubGVuZ3RoLCBvbGRDb2xsZWN0aW9uLCAwLCBvbGRDb2xsZWN0aW9uLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH1lbHNle1xuICAgICAgICBpZih0aGlzLmNvbGxlY3Rpb24gaW5zdGFuY2VvZiBNYXApe1xuICAgICAgICAgIHJlY29yZHMgPSBjaGFuZ2VSZWNvcmRzO1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgcmVjb3JkcyA9IHByb2plY3RBcnJheVNwbGljZXModGhpcy5jb2xsZWN0aW9uLCBjaGFuZ2VSZWNvcmRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3aGlsZShpLS0pIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKHJlY29yZHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKHRoaXMubGVuZ3RoT2JzZXJ2ZXIpe1xuICAgICAgdGhpcy5sZW5ndGhPYnNlcnZlci5jYWxsKHRoaXMuY29sbGVjdGlvblt0aGlzLmxlbmd0aFByb3BlcnR5TmFtZV0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvbkxlbmd0aE9ic2VydmVyIHtcbiAgY29uc3RydWN0b3IoY29sbGVjdGlvbil7XG4gICAgdGhpcy5jb2xsZWN0aW9uID0gY29sbGVjdGlvbjtcbiAgICB0aGlzLmNhbGxiYWNrcyA9IFtdO1xuICAgIHRoaXMubGVuZ3RoUHJvcGVydHlOYW1lID0gY29sbGVjdGlvbiBpbnN0YW5jZW9mIE1hcCA/ICdzaXplJyA6ICdsZW5ndGgnO1xuICAgIHRoaXMuY3VycmVudFZhbHVlID0gY29sbGVjdGlvblt0aGlzLmxlbmd0aFByb3BlcnR5TmFtZV07XG4gIH1cblxuICBnZXRWYWx1ZSgpe1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25bdGhpcy5sZW5ndGhQcm9wZXJ0eU5hbWVdO1xuICB9XG5cbiAgc2V0VmFsdWUobmV3VmFsdWUpe1xuICAgIHRoaXMuY29sbGVjdGlvblt0aGlzLmxlbmd0aFByb3BlcnR5TmFtZV0gPSBuZXdWYWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShjYWxsYmFjayl7XG4gICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzO1xuICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gZnVuY3Rpb24oKXtcbiAgICAgIGNhbGxiYWNrcy5zcGxpY2UoY2FsbGJhY2tzLmluZGV4T2YoY2FsbGJhY2spLCAxKTtcbiAgICB9O1xuICB9XG5cbiAgY2FsbChuZXdWYWx1ZSl7XG4gICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuY2FsbGJhY2tzLFxuICAgICAgaSA9IGNhbGxiYWNrcy5sZW5ndGgsXG4gICAgICBvbGRWYWx1ZSA9IHRoaXMuY3VycmVudFZhbHVlO1xuXG4gICAgd2hpbGUoaS0tKSB7XG4gICAgICBjYWxsYmFja3NbaV0obmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG59XG4iXX0= |